// 1.依次顺序执行一系列任务
// 2.所有任务全部完成届可以得到每个任务的执行结果
// 3.需要返回两个方法，start用于启动任务，pause用于暂停任务每个任务具有原子性，即不可中断，只能在两个任务之间中断

function processTasks(...tasks) {
  let isRunning = false;
  const result = [];
  let i = 0;
  return {
    async start() {
      return new Promise(async (resolve, reject) => {
        if (isRunning) {
          return;
        }
        isRunning = true;
        for (; i < tasks.length; i++) {
          const r = await tasks[i]();
          result.push(r);
          if (!isRunning) {
            return;
          }
        }
        isRunning = false;
        resolve(result);
      });
    },
    pause() {
      isRunning = false;
    },
  };
}
